/*
 * @Author: LiZn
 * @Date: 2021-08-21 05:46:39
 * @LastEditTime: 2021-08-22 11:03:27
 * @LastEditors: LiZn
 * @Description: 路由守卫
 * @FilePath: \todaynews\src\permission.js
 */
import router from './router'
import store from './store'
const whitePages = ['/my','/videos','/xigua','/content','/index']
router.beforeEach(async (to,from,next)=>{
  //首先判断当前用户有没有登录，主要是看一下本地有没有存储用户的登录标识
  const userToken = localStorage.getItem('userToken');
  if(userToken){
    //还要再判断一下，登录的用户是不是还想去登录页，
    if(to.path=='/login'){
      //直接去首页
      next('/')
    }else{
      //如果用户登录了可以去任何界面,直接放行
      //接下来还要判断用户的角色,同时获取用户可访问的路由
      const userRoles = store.getters.roles&&store.getters.roles.length>0;
      const checkFalse = store.getters.routesPath.includes(to.path)
      if(!checkFalse){
        //next('/')
      }
      if(userRoles){
        //如果获取了用户角色，则放行
        next();
      }else{
        //如果没有获取用户角色，则要先获取用户觉得，并修改路由
        const roles = await store.dispatch('user/getUserInfo',userToken);
        //接着根据用户角色生获得动态的路由
        const asyncRouter = await store.dispatch('permission/generaterRoutes',roles);
        console.log(router)
        //根据获得动态路由，将静态路由和动态路由融合
        // router.addRoutes(asyncRouter);
        //定义一个路由路径数字，判断用户走的路径是不是有效路径
        asyncRouter.forEach(i=>{
          router.addRoute(i);
        });
        //继续切换路由
        next({...to,replace:true})
      }
    }
  }else{
    //如果没有登录，如果不是去的asyncRoutes页面，就可以随便去，如果去的不是这些页面，就需要去登录页面；
    if(checkJin(whitePages,to.path)){
      //此时说明白名单中没有要去的路由，这是要去登录了。
      next()
    }else{
      next({
        path:`/my?redirect=${to.path}`
      })
    }

  }
});
function checkJin(whitePages,path){
  return whitePages.some(item=>path.includes(item))
}